﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string p = string.Empty;
                int r = -1;
                bool res = false;
                //while (!res)
                //{
                //    res = GetCorrectPath(out p);
                //}
                //Console.WriteLine(@"использовать сравнение по хэшу? Набери ""1"" - да, иначе - нет");

                //int.TryParse(Console.ReadLine(), out r);
                /////тест
                p = @"C:\VS2010Projects\VS2008projects\Projects";
                r = 1;
                ////(r == 1) ? true : false;
                //MainSearch ms = new MainSearch();
                //ms.CalcHash = (r == 1) ? true : false;
                //Console.WriteLine("Start: " + DateTime.Now);
                //var startDt = DateTime.Now.Ticks;
                //ms.StartSearch(new string[] { p });
                //ms.GetDublicates();
                //TimeSpan alltime = TimeSpan.FromTicks((DateTime.Now.Ticks - startDt));
                //Console.WriteLine("End: " + DateTime.Now);
                //Console.WriteLine(String.Format("Затрачено времени: {0} ч {1} мин {2} сек", alltime.Hours, alltime.Minutes, alltime.Seconds));
                //Console.WriteLine("просмотрено файлов:{0}", ms.CountSerchedFiles);
                //Console.WriteLine("Найдено файлов дубликатов:{0}", ms.Dublicates.Count);
                //ms.Dublicates.ForEach(a => Console.WriteLine(a.AllInfo.FullName));
                //Console.WriteLine("Считаем хэш в Таске.");
                //RunProgram(true, true, p);
                //Console.WriteLine("===");
                Console.WriteLine("Считаем хэш в Parallel.");
                RunProgram(false, true, p);
                Console.WriteLine("===");
                Console.Read();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error!!!" + e.ToString());
                Console.Read();
            }
        }
        static bool GetCorrectPath(out string path)
        {
            Console.WriteLine("Введите путь для поиска:");
            path = Console.ReadLine();
            if (!Directory.Exists(path))
            {
                Console.WriteLine("Директория не найдена:{0}", path);
                return false;
            }
            else
            {
                return true;
            }
        }
        static void RunProgram(bool dohash, bool calchash, string path)
        {
            MainSearch ms = new MainSearch();
            ms.CalcHash = calchash;
            ms.DoHash = dohash;
            Console.WriteLine("Start: " + DateTime.Now);
            var startDt = DateTime.Now.Ticks;
            ms.StartSearch(new string[] { path });
            if (!dohash)
            {
                //запускаем Parallel
                ms.CalchHashParallel();

            }
            ms.GetDublicates();
            TimeSpan alltime = TimeSpan.FromTicks((DateTime.Now.Ticks - startDt));
            Console.WriteLine("End: " + DateTime.Now);
            Console.WriteLine(String.Format("Затрачено времени: {0} ч {1} мин {2} сек", alltime.Hours, alltime.Minutes, alltime.Seconds));
            Console.WriteLine("просмотрено файлов:{0}", ms.CountSerchedFiles);
            Console.WriteLine("Найдено файлов дубликатов:{0}", ms.Dublicates.Count);
            //ms.Dublicates.ForEach(a => Console.WriteLine(a.AllInfo.FullName));
        }
    }
}
